package Queue;

class MyCircularQueue {
    // 用数组来实现 循环队列

    public int[] iml;

    // 定义一个头一个尾
    public int head;
    public int tail;

    //构造器，设置队列长度为 k
    public MyCircularQueue(int k) {
        // 多创建一个空间，方便后面判断是否满了
        iml=new int[k+1];
    }

    // 向循环队列插入一个元素。如果成功插入则返回真。
    public boolean enQueue(int value) {
        if(isFull()){
            return false;
        }
        iml[tail]=value;
        tail=(tail+1)%iml.length;
        return true;
    }

    // 从循环队列中删除一个元素。如果成功删除则返回真。
    public boolean deQueue() {
        if(isEmpty()){
            return false;
        }
        head=(head+1)%iml.length;
        return true;
    }

    //从队首获取元素。如果队列为空，返回 -1 。
    public int Front() {
        if(isEmpty()){
            return -1;
        }
        return iml[head];
    }

    //: 获取队尾元素。如果队列为空，返回 -1 。
    public int Rear() {
        if(isEmpty()){
            return -1;
        }
        return iml[(( tail+ iml.length)-1)% iml.length];
    }

    //检查循环队列是否为空。
    public boolean isEmpty() {
        return head==tail;
    }

    // 检查循环队列是否已满。
    public boolean isFull() {
        return ((tail+1 )% iml.length) == head ;
    }
}